package cc.comac.mom.datahandlers.entity;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import cc.comac.mom.bean.EquipFaultDisplay;
import cc.comac.mom.bean.ResultDev;
import cc.comac.mom.dao.entity.EquipFaultDisplayDao;
import cc.comac.mom.entity.EquipFaultDisplayEntity;
import cc.comac.mom.util.BaseEntityDataUtil;
import cc.comac.mom.util.ResultBean;

@Component
@Transactional
public class EquipFaultDisplayDataHandler extends ServiceImpl<EquipFaultDisplayDao, EquipFaultDisplayEntity> {

	@Autowired
	private EquipFaultDisplayDao equipFaultDisplayDao;

	@Autowired
	private BaseEntityDataUtil baseEntityDataUtil;

	public ResultBean insertFaultDisplay(EquipFaultDisplay equipFaultDisplay) {
		ResultBean resultBean = new ResultBean(true);
		if (StringUtils.isEmpty(equipFaultDisplay.getFaultDisplayCode())) {
			throw new RuntimeException("新增故障现象代码不能为空");
		}
		QueryWrapper<EquipFaultDisplayEntity> queryWrapper1 = new QueryWrapper<EquipFaultDisplayEntity>();
		queryWrapper1.eq("row_status", 1);
		queryWrapper1.eq("fault_display_describe", equipFaultDisplay.getFaultDisplayDescribe());
		List<EquipFaultDisplayEntity> selectList1 = equipFaultDisplayDao.selectList(queryWrapper1);
		if (selectList1.size() != 0) {
			throw new RuntimeException("故障现象描述" + equipFaultDisplay.getFaultDisplayDescribe() + "已存在！");
		}
		QueryWrapper<EquipFaultDisplayEntity> queryWrapper = new QueryWrapper<EquipFaultDisplayEntity>();
		queryWrapper.eq("row_status", 1);
		queryWrapper.eq("fault_display_code", equipFaultDisplay.getFaultDisplayCode());
		List<EquipFaultDisplayEntity> selectList = equipFaultDisplayDao.selectList(queryWrapper);
		if (selectList.size() != 0) {
			throw new RuntimeException("故障现象代码" + equipFaultDisplay.getFaultDisplayCode() + "已存在！");
		}
		baseEntityDataUtil.setBaseEntityData(equipFaultDisplay);
		int insert = equipFaultDisplayDao.insert(equipFaultDisplay);
		if (insert != 1) {
			resultBean.setErrorMessge("新增失败，新增数量" + insert);
		}
		return resultBean;
	}

	public ResultBean batchDelete(List<EquipFaultDisplay> list) {
		ResultBean resultBean = new ResultBean(true);
		// 预留删除校验
		// ..........

		List<EquipFaultDisplayEntity> list1 = new ArrayList<EquipFaultDisplayEntity>();
		for (EquipFaultDisplay equipFaultDisplay : list) {
			EquipFaultDisplayEntity equipFaultDisplayEntity = new EquipFaultDisplayEntity();
			equipFaultDisplayEntity.setId(equipFaultDisplay.getId());
			equipFaultDisplayEntity.setRowStatus(0);
			baseEntityDataUtil.updateBaseEntityData(equipFaultDisplayEntity);
			list1.add(equipFaultDisplayEntity);
		}
		boolean updateBatchById = updateBatchById(list1, list1.size());
		if (!updateBatchById) {
			resultBean.setErrorMessge("批量删除失败");
		}

		return resultBean;
	}

	public ResultBean updateFaultDisplay (EquipFaultDisplay equipFaultDisplay) {
		ResultBean resultBean = new ResultBean(true);
		if (equipFaultDisplay.getId() == 0) {
			throw new RuntimeException("当前未选择数据！,id为0");
		}

		if (StringUtils.isNotEmpty(equipFaultDisplay.getFaultDisplayDescribe())) {
			QueryWrapper<EquipFaultDisplayEntity> queryWrapper = new QueryWrapper<EquipFaultDisplayEntity>();
			queryWrapper.eq("row_status", 1);
			queryWrapper.eq("fault_cause_describe", equipFaultDisplay.getFaultDisplayDescribe());
			queryWrapper.ne("fault_display_id", equipFaultDisplay.getId());
			List<EquipFaultDisplayEntity> selectList = equipFaultDisplayDao.selectList(queryWrapper);
			if (selectList.size() > 0) {
				throw new RuntimeException("故障现象描述" + equipFaultDisplay.getFaultDisplayDescribe() + "已存在！");
			}
		}

		if (StringUtils.isNotEmpty(equipFaultDisplay.getFaultDisplayCode())) {
			QueryWrapper<EquipFaultDisplayEntity> queryWrapper = new QueryWrapper<EquipFaultDisplayEntity>();
			queryWrapper.eq("row_status", 1);
			queryWrapper.eq("fault_display_code", equipFaultDisplay.getFaultDisplayCode());
			queryWrapper.ne("fault_display_id", equipFaultDisplay.getId());
			List<EquipFaultDisplayEntity> selectList = equipFaultDisplayDao.selectList(queryWrapper);
			if (selectList.size() > 0) {
				throw new RuntimeException("故障现象代码" + equipFaultDisplay.getFaultDisplayCode() + "已存在！");
			}
		}
		// 设置通用字段
		baseEntityDataUtil.updateBaseEntityData(equipFaultDisplay);
		// 更新数据
		int updateById = equipFaultDisplayDao.updateById(equipFaultDisplay);
		if (updateById != 1) {
			throw new RuntimeException("更新失败，更新数量为" + updateById);
		}
		return resultBean;
	}

	public ResultDev selectBySomeField(EquipFaultDisplay equipFaultDisplay) {
		ResultDev resultDev = new ResultDev();
		if (equipFaultDisplay.getPageNum() == null || equipFaultDisplay.getPageNum() == 0) {
			equipFaultDisplay.setPageNum(1);
		}
		if (equipFaultDisplay.getPageSize() == null || equipFaultDisplay.getPageSize() == 0) {
			equipFaultDisplay.setPageSize(10);
		}
		QueryWrapper<EquipFaultDisplayEntity> queryWrapper = new QueryWrapper<EquipFaultDisplayEntity>();
		queryWrapper.eq("row_status", 1);
		queryWrapper.orderByDesc("creation_time");
		if (StringUtils.isNotEmpty(equipFaultDisplay.getFaultDisplayCode())) {
			queryWrapper.like("fault_display_code", equipFaultDisplay.getFaultDisplayCode());
		}
		if (StringUtils.isNotEmpty(equipFaultDisplay.getFaultDisplayDescribe())) {
			queryWrapper.like("fault_display_describe", equipFaultDisplay.getFaultDisplayDescribe());
		}
		Page<EquipFaultDisplayEntity> page = new Page<EquipFaultDisplayEntity>(equipFaultDisplay.getPageNum(),
				equipFaultDisplay.getPageSize(), true);
		IPage<EquipFaultDisplayEntity> selectPage = equipFaultDisplayDao.selectPage(page, queryWrapper);
		resultDev.setEntityList(selectPage.getRecords());
		resultDev.setPageCount((int)selectPage.getSize());
		resultDev.setTotalQuantity((int)selectPage.getTotal());
		return resultDev;
	}
	
	public ResultDev selectAll () {
		ResultDev resultDev = new ResultDev();
		QueryWrapper<EquipFaultDisplayEntity> queryWrapper = new QueryWrapper<EquipFaultDisplayEntity>();
		queryWrapper.eq("row_status", 1);
		List<EquipFaultDisplayEntity> selectList = equipFaultDisplayDao.selectList(queryWrapper);
		resultDev.setEntityList(selectList);
		return resultDev;
	}

}
